{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a11fa1b9-d002-4177-8f49-4130a3598995",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cc8f9970-72e0-4aac-8798-e3290696efff",
   "metadata": {},
   "outputs": [],
   "source": [
    "class BernoulliBandit:\n",
    "    # 伯努利老虎机，输入K表示拉杆个数\n",
    "    def __init__(self,K):\n",
    "        self.probs =np.random.uniform(size=K) #随机生成K个0~1的数，作为拉动每根拉杆的获奖概率\n",
    "        self.best_idx = np.argmax(self.probs) #获奖概率最大的拉杆\n",
    "        self.best_prob = self.probs[self.best_idx] # 最大的获奖概率\n",
    "        self.K = K\n",
    "\n",
    "\n",
    "    def step(self,k):\n",
    "        #当玩家选择了k号拉杆后，根据拉动该老虎机的k号拉杆获得奖励的概率返回1（获奖）或0（未获奖）\n",
    "        if np.random.rand() < self.probs[k]:\n",
    "            return 1\n",
    "        else:\n",
    "            return 0\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3b2773f9-67f7-4920-ac83-c7f4f5fb101d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "获奖概率最大的拉杆为1号,其获奖概率为0.9507\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(42)\n",
    "K = 10\n",
    "bandit_10_arm = BernoulliBandit(K)\n",
    "print(\"获奖概率最大的拉杆为%d号,其获奖概率为%.4f\" %\n",
    "      (bandit_10_arm.best_idx, bandit_10_arm.best_prob))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0ed1cdff-3066-4911-911e-8865e4dca75a",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Solver:\n",
    "    # 多臂老虎机算法基本框架\n",
    "    def __init__(self,bandit:BernoulliBandit):\n",
    "        self.bandit = bandit\n",
    "        self.counts = np.zeros(self.bandit.K) # 每根拉杆的尝试次数\n",
    "        self.regret = 0  # 当前步的累计Regret\n",
    "        self.action = [] # 维护一个列表，记录每一步的动作\n",
    "        self.regrets = [] # 维护一个列表，记录每一步的累计Regret\n",
    "\n",
    "    def update_regret(self,k):\n",
    "        # 计算累计懊悔并保存， k是本次动作选择的bandit的编号\n",
    "        self.regret += self.bandit.best_prob - self.bandit.probs[k]\n",
    "        self.regrets.append(self.regret)\n",
    "\n",
    "    def run_one_tier(self):\n",
    "        #返回当前动作选择哪一根拉杆， 由每个具体的策略实现\n",
    "        raise NotImplementedError\n",
    "    \n",
    "    def run(self,num_steps):\n",
    "        #运行一定次数， num_step为总运行次数\n",
    "        for _ in range(num_steps):\n",
    "            k = self.run_one_tier()\n",
    "            self.counts[k] += 1\n",
    "            self.action.append(k)\n",
    "            self.update_regret(k)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "17a653a4-4406-4531-8e61-74a2f133e872",
   "metadata": {},
   "outputs": [],
   "source": [
    "class EpsilonGreedy(Solver):\n",
    "    # epsilon 贪婪算法, 继承 solver 类\n",
    "    def __init__(self, bandit,epsilon=0.01,init_prob=1.0):\n",
    "        super().__init__(bandit)\n",
    "        self.epsilon = epsilon\n",
    "        # 初始化拉动所有拉杆的期望奖励估值\n",
    "        self.estimates = np.array([init_prob] *self.bandit.K)\n",
    "\n",
    "    def run_one_tier(self):\n",
    "        if np.random.random() < self.epsilon:\n",
    "            k = np.random.randint(0,self.bandit.K) # 随机选择一根拉杆\n",
    "        else:\n",
    "            k = np.argmax(self.estimates) # 选择期望奖励估值最大的拉杆\n",
    "        r = self.bandit.step(k) # 得到本次动作的奖励\n",
    "        self.estimates[k] += 1./(self.counts[k]+1)*(r-self.estimates[k])\n",
    "        return k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2c1321f6-ddca-4bb0-89ce-7bb61b9b2c20",
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_results(solvers: list[Solver], solver_names):\n",
    "    # 生成累计懊悔随时间变化的图像,收入solvers是一个列表, 列表中的每个元素是一种特定的策略; solver_names 也是一个列表, 存储每个策略的名称\n",
    "    for idx, solver in enumerate(solvers):\n",
    "        time_list = range(len(solver.regrets))\n",
    "        plt.plot(time_list,solver.regrets, label=solver_names[idx])\n",
    "    plt.xlabel('Time steps')\n",
    "    plt.ylabel('Cumulative regrets')\n",
    "    plt.title('%d-armed bandit'% solvers[0].bandit.K)\n",
    "    plt.legend()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "417310ff",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epsilon-贪婪算法的累积懊悔为： 31.43605891746862\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAASztJREFUeJzt3Qd8VFX2wPGTHgJJ6L0LgnSkKypKVxFcLCAqIKvLCipiRQVEXUH9K64NLCuKooiuKKIiiBSlFymhgyBI74GE9Pl/zg0zO0MKmWQyb8rv+/mMM/PmzZs7j5h3cu6594bYbDabAAAA+KFQqxsAAABQWAQyAADAbxHIAAAAv0UgAwAA/BaBDAAA8FsEMgAAwG8RyAAAAL9FIAMAAPwWgQwAAPBbBDIAAtrChQslJCTE3Ofn2WefNfsdO3ZMfMVHH31k2rRnzx7Htk6dOpkbgGwEMoCfOXv2rIwdO1Z69OghZcuWNRc6veDlZcuWLWbfUqVKmf3vuusuOXr0qFfbjOJz4MABE4StW7fO6qYAlgi35mMBFJZmDJ577jmpWbOmNG/ePN9Mw19//SVXX321xMfHy4svvmiCoP/7v/+TjRs3ysqVKyUyMtKrbUfRzZ07N0cgM27cOKldu7a0aNHCsnYBViGQAfxMlSpV5ODBg1K5cmVZvXq1tGnTJs99NXhJSkqSNWvWmMBHtW3bVrp27WqyOPfdd1+xtVM/t2TJksV2/GBF8Am4omsJ8DNRUVEmiCmI//73v3LjjTc6ghjVpUsXufTSS2XGjBkXff+ff/4p999/vzRo0EBKlCgh5cqVk1tvvdWlZsO5lmPRokVm/4oVK0r16tXNa1rP0aRJE9mwYYNcc801EhMTI/Xq1ZOvvvrKvK7vadeunTm+fs7PP/+cox379++Xe+65RypVqmS+f+PGjeXDDz/MNQPVp08fE0BpGx5++GFJTU0VdzNet912m8TFxZnv+9BDD0lKSorLPlOmTJHrrrvOfIa2p1GjRjJp0qQcx9IsiZ7/3377zQSQ0dHRUrduXZk6dWqOfTdt2mSOqedBz90LL7wgWVlZOfZzrpHRbJw9kB08eLD5N7hYVyMQaMjIAAFKL/5HjhyR1q1b53hNL6o//PDDRY+xatUqWbp0qfTr189cXDWA0Qu2Xkg3b95sghJnGsRUqFBBxowZYzIydidPnjQXdD2OBkJ6DH08bdo0GTFihAwdOlTuuOMOeeWVV+SWW26Rffv2SWxsrHnv4cOHpX379uYCPXz4cHP8H3/8UYYMGSKJiYnm/ercuXPSuXNn2bt3rzz44INStWpV+eSTT+SXX35x67xpEKMByPjx42X58uXyxhtvmPY7Bx/afg2mbrrpJgkPD5fvvvvOfHcNPIYNG+ZyvJ07d5rvpO0dOHCgCcAGDRokrVq1MsdQhw4dkmuvvVYyMjLkySefNIHYe++9Z4Ka/Fx22WWmm1HPt2bXrrrqKrP9iiuucOs7A37NBsBvrVq1yqb/G0+ZMiXP16ZOnZrjtccee8y8lpKSku/xk5OTc2xbtmxZjuPq5+u2jh072jIyMlz2v+aaa8xrn332mWPb1q1bzbbQ0FDb8uXLHdt/+umnHN9nyJAhtipVqtiOHTvmctx+/frZ4uPjHW18/fXXzXtnzJjh2CcpKclWr149s33BggX5ftexY8ea/W666SaX7ffff7/Zvn79+nzPS/fu3W1169Z12VarVi3z3sWLFzu2HTlyxBYVFWV75JFHHNtGjBhh9luxYoXLfvr9dPvu3btdzqfeCvIzAAQDupaAAKUZCqVdHxfSLg7nffLinBFIT0+X48ePm26h0qVLy9q1a3Psf++990pYWFiO7TpiSjMwdtqFpMfQjIJ2K9nZH//xxx/m3mazme6xXr16mcfa7WO/de/eXU6fPu1oh2aYtH5Isx92mjFytw7owozKAw884Dh+budF26Dt0W4zbbc+d6bdTvZMidKMkn5/+3e0H1uzTpopc95vwIABbrUdCEZ0LQEByn6xza1GxF7zoftkZmbmGI6tw7S1qFQDHe1i0ZoQ7arSYMLuwgu2qlOnTq5t0W4p7RpypiOpatSokWOb0q4cpe06deqU6WbRW260+8xez6NB1oWfo0GDO+rXr+/y/JJLLpHQ0FCXuqAlS5aYIfDLli2T5ORkl/31vNi/h3KuT7IrU6aM4zva2+4c0BW27UAwIpABApRmJ5SOcLqQbtNgRbM1eoG+MABZsGCBqYPRbIQGMVqH0qFDB3OB1kBBsyu5FaLmVdORW5Ymv+32gMn+GXfeeaepL8lNs2bNpDhdGBjt2rXL1OI0bNhQXnvtNROMadCnWZWJEyfmOC8X+44AioZABghQ1apVM90TOkT7QjqHjH3OER0BNW/ePJfXdX4apSOLNIB49dVXXbI5miXxBm2/Fv1q1khHW+WnVq1akpCQYAIE5+Bj27Ztbn3mjh07XAI7LdbV4EQLgJUW9mqWa9asWS7ZFg3+Ckvbrp97oYK0/cJACwg21MgAAaxv374ye/ZsMwrIbv78+bJ9+3YzesheL6NBgvNNuz7s2YQLMwdvvvmmCSy8QT9fv4PWyWiQciHnLrHrr7/eTA5nH9attNsnry6pvLz99ts5vq/q2bOno03qwm42zVwVlrZdR0hpgOn83XRU18XY5+rxVnAJ+BoyMoAfeuutt8yFSy/c9iyBzqGitDvIXqPx1FNPyZdffmmG9up8KDqzrw5xbtq0qZl35GJ0yLQOYdbjadGq1oToPC86v4q3TJgwwWQ7tIZEi4m1HSdOnDBFvtoWfaz0NT0vd999t5kAULvWtO0XDhG/mN27d5th1bqsg37fTz/91AwNt2epunXrZrqStAD5H//4hzmn77//vplTJrduvIJ4/PHHTVv1M/XfyT78WjM1Ov9OfrSGRwunJ0+ebLJX+l49V3nVKwEBx+phUwDcZx/Wm9vNeaiuSkhIsHXr1s0WExNjK126tG3AgAG2Q4cOFehzTp48aRs8eLCtfPnytlKlSpkhxjp0Wj9/4MCBOYZf61DgC+lQ4caNG+f6HW644YYc2/U4w4YNc9l2+PBhs61GjRq2iIgIW+XKlW2dO3e2vffeey77/fnnn2b4tH5XbfNDDz1kmzNnjlvDrzdv3my75ZZbbLGxsbYyZcrYhg8fbjt37pzLvrNmzbI1a9bMFh0dbatdu7btpZdesn344Yc5zn9e3/HCIdRqw4YNZpses1q1arbnn3/e9p///Oeiw6/Vt99+a2vUqJEtPDycodgIOiH6H6uDKQAAgMKgRgYAAPgtAhkAAOC3CGQAAIDfIpABAAB+i0AGAAD4LQIZAADgtwJ+QjydWlwnDdOJopjKGwAA/6Czw5w5c0aqVq1qFm4N2kBGg5gLV9gFAAD+QZdYqV69evAGMpqJsZ+IuLg4q5sDAAAKIDEx0SQi7NfxoA1k7N1JGsQQyAAA4F8uVhZCsS8AAPBbBDIAAMBvEcgAAAC/FfA1MgWVmZkp6enpVjcDfi4iIkLCwsKsbgYABI2gD2R0nPqhQ4fk1KlTVjcFAaJ06dJSuXJl5i0CAC8I+kDGHsRUrFhRYmJiuPigSEFxcnKyHDlyxDyvUqWK1U0CgIAXHuzdSfYgply5clY3BwGgRIkS5l6DGf25opsJAIpXUBf72mtiNBMDeIr954maKwAofkEdyNjRnQRP4ucJALyHQAYAAPgtAhnkmVX45ptvzOM9e/aY5+vWrZNg0KlTJxkxYoTVzQAAFACBjJ8aNGiQCS4uvPXo0cMjxz948KD07NlTitvvv/8ut99+uxnhExUVJbVq1ZIbb7xRvvvuOzMKCACA/AT1qCV/p0HLlClTXLZpMOAJOg9Kcfv222/ltttuky5dusjHH38s9erVk9TUVFm6dKk888wzctVVV5k5WS6kAY6OOAsP58cXALztXFqmHE9KddlWOiZSSkVZ8zuZjIwf06BFAw7nW5kyZcxrmp2ZNGmSyarokOC6devKV1995XhvWlqaDB8+3GRCoqOjTSZk/PjxuXYt5WbRokXStm1b0wY9xpNPPikZGRku3TMPPvigPP7441K2bFnTtmeffdbxelJSkgwZMkRuuOEG+f7776Vbt26mjZdddpnZvn79eomPjzf7Lly40LTnxx9/lFatWpnP/O233yQrK8u0uU6dOuY7Nm/e3OU7qoSEBHMOSpUqJZUqVZK77rpLjh075tKOu+++27yu3+PVV191ef9zzz0nTZo0yfH9W7RoIaNHjy7wvxUABIJTyWnSfvx86fjSApfbrHUHLGsTgcyFE5qlZVhyK45uFL3Q9u3b1wQFAwYMkH79+smWLVvMa2+88YbMmjVLZsyYIdu2bZNp06ZJ7dq1C3Tc/fv3y/XXXy9t2rQxx9aA6T//+Y+88MILLvtplqVkyZKyYsUKefnll01QMG/ePPPa3Llz5fjx4ybQKejoHw2WJkyYYL5Ds2bNTBAzdepUmTx5smzatEkefvhhufPOO02QpXSOoOuuu05atmwpq1evljlz5sjhw4dNFsjuscceM/trdkjbpEHT2rVrHa/fc8895vNWrVrl0h22YcMGGTx4cIHOFwAEij+OJcnpc9lTS0SFhzpuYRZGE+TmnZxLz5RGY36y5LM3P9ddYiLd++eYPXu2ySQ4e+qpp8xN3XrrrfL3v//dPH7++edNEPHmm2/KO++8I3v37pX69etLx44dTcCgGZmC0vfXqFFD3nrrLfPehg0byoEDB+SJJ56QMWPGSGho9k+0Bhtjx441j/WzdP/58+dL165dZfv27WZ7gwYNHMfVYOHaa691PJ8+fbqpl7HTQEjfq7QL6sUXX5Sff/5ZOnToYLZpRkczNe+++65cc8015vM0iNH97D788EPTdv38qlWrmgDs008/lc6dOzuCr+rVqzv218fdu3c3XXgauCl9rMfXzwOAYJKRmf1Hd93yJeWXRzuJLyCQ8WN60ddsiDPtxrGzX+Cdn9tHHmmxsAYFGkhorY0GDNq9UxCaodBjOWdMrrzySjl79qz89ddfUrNmTUcg40y7buzT9+dG97e3TwMf564q1bp1a8fjnTt3muUA7IGNc5eZBi9Ks0ULFizIEeypXbt2yblz58z+7dq1czl/zsGVuvfee01m5rXXXjNB2meffSYTJ068yFkCgMCTkZll7sPDfGe+LAIZJyUiwkxmxKrPdpd222iBbGFcfvnlsnv3blN3olkNe9HthTUmRV0J2pkGPlrXYg9UlHZrtW/f3jzW2pf8vo9+XzsNmpTW11SrVi3Xgmfdp1evXvLSSy/lOJYGVRoMFYQeQ485c+ZMiYyMNDP23nLLLQV6LwAEkrTzgUyElX1JFyCQueBC6273ji9bvny5KWR1fm7PVqi4uDgz9FlvemHWzMyJEydcsjq50YLc//73v6aux56VWbJkicTGxrp0y+RHsz/6ORpkaIDgrkaNGpngQrvItJsnr2BN26m1P7mNcLrkkktMsKU1PPYs0smTJ023k/Mx9b0DBw40XUoayGitkX1NJQAIxq6lcAIZeILWiejq3c70olu+fHnz+MsvvzTdMVoHo8W8K1euNDUhSrtJNCuhgY12l+i+OrIot+HOF7r//vvl9ddflwceeMCMfNKsitbCjBw50lEfczHa3fPBBx+YIEpHLukIJ83SaBZFi3JVfgsuatD06KOPmgJfzfLodzx9+rQJqDRA08Bj2LBh8v7770v//v0do6c0C6O1N/rZ2gYdIaUFv7poqC7y+PTTT+f6HbTWSAM4pZ8BAMEo43xWPZKuJXiCXvA1GHGm9R1bt241j8eNG2cu2hp46H6ff/65yWTYAwEdSbRjxw4TMGgh6w8//FCgQES7cnRfDQB0yLMGCBoQ6Nwv7rj55pvNnDGaldHMkWaDdMi1Bl8XFvrmRguYK1SoYEYv/fHHHyYI0yyMvdhZi3k16NAiZM0AaeCnRc2aebJ/z1deecXRBaXn5JFHHjEB0YU0yLriiitMG51ragAgmKTbMzIF/KPVG0JsAT59amJiork46sVJ/1J3lpKSYupEdB4SnUslkGiXj3bZ9OnTx+qmBAT930SDGQ0KNfOUn0D+uQLgP3YeOSPzNh8Rm3juMr/pQKJ8v+GgXFW/vHwypJ1l129nZGSAizh69KjJEGk3HnPHAPAXI75YJwn7E4vl2LHRvhM++E5LAB+ltTNad/Tee+85Zk4GAF+deTcjKzsDs+/EOXPfs0lljy4fEBEeKne1L/jcY8WNQCZABXiPoVdxLgH4g4nztsu/5+/Isf253k2kQqxn1uHzRZZW6+hkbjoJmvZ96U0nWdN5TZxrDXTkiY4o0REmOt2+TjEPAABcrdh9PMe2Ky4pJ+VKRkogszQjo3OO6No5WkSpf/Xq9PC9e/c2a9k0btzYDK3VCc90aLAW/OhQ37/97W8eH/7KX9zwJH6eAFghLSN7aPR7d7WSbo0rS7CwNJDRIa/O/vWvf5ksjU7cpkGOznmi08Hrwn9KJyTTuTz0dftssJ6YeVanumeCM3iK/jzlNrMxABSn1POBTGS47wyNDqoamczMTJN5SUpKMl1Ma9asMVPB67T5dro4oc7AumzZMo8EMjp/is49Yl//JyYmJseKy4Bbq6cnJ5ufJ/25ym9CPwAoroxMVHhw/e6xPJDZuHGjCVy0HkbrYHTuE520TRcP1OngL5xptlKlSjlms3Wmk57pzXkcen50NluV32KGgDv0Z9b+cwUA3pJKRsYaOhOtBi064Y0uWKhTyy9atKjQx9NZXnVG24LSDIzOeqtDbDUDBBSFdieRiQHg6WzvUzMTZN2+U/nud+BU9nDrKAIZ79Ksi33F41atWsmqVavk3//+t1mDJy0tTU6dOuWSldFRS/n9tTtq1CiXmVc1I1OjRo2LtkMvPlyAAAC+5uDpFPl85d4C7RsRFiJV4oNrRnHLA5kL6QKA2jWkQY3+dTt//nwz7Frp4oS62rF2ReVFV0TWGwAAgSAlPdPcx0SGybt3tcp339rlSkq5UsF1DbQ0kNHsSc+ePU0B75kzZ8wIpYULF8pPP/1khlvrQoSaXdFFCXWeGV1tWYMYTxT6AgDgT7UvGshcVb+C1c3xOZYGMlpgq6seHzx40AQuOjmeBjFdu3Y1r0+cONGsUqwZGc3SdO/eXd555x0rmwwAgFcF62gkvwhkdJ6Y/OjKwW+//ba5AQAQjNIyg3M0UkFxVgAA8GHHz6YG5WikguKsAADgw9btO23u7ataw8dHLQEAEMhOJafJsbNpbmdkapRhKZ3cEMgAAOAle48nS5fXFjnqXtzRtk65YmmTvyOQAQDAS7YcSjRBTFhoiMRGF/wSXLpEhHS+rGKxts1fEcgAAOAlyWkZ5r5D3XLy6d/bWd2cgECxLwAAXrJ81wnH5HbwDAIZAAC84ODpc/LF6n3mcVyJCKubEzAIZAAA8FKhr93ADrUtbUsgoUYGAAAPWLrzmHy4ZHee872cSMoect2iRmlpWj3ey60LXAQyAAB4wFsLdsrSXccvul/tcjFeaU+wIJABAMADklKzRyQNvrK2NKoSl+s+EWGh0qkBK1h7EoEMAAAekHp+lerrGlaUq+oTrHgLxb4AAHhA2vlAJjKMS6s3cbYBAPBgRiaSVaq9iq4lAAAKITPLJt9vPChHz2Qv6ph4Lt3cR4Uz2Z03EcgAAFAIi3cclQc//z3HdnfWUELRcbYBACgEeyamUlyUtDu/MvVlVeKkRlmGV3sTgQwAAIWQkZk98V3z6qXljf4trW5O0KIiCQCAQkjPzHLMDQPrcPYBAChCIBMeFmJ1U4IagQwAAIVgX1MpPJRLqZU4+wAAFEK6Y94YMjJWIpABAKAQ0snI+ATOPgAAhbBk5zFzT42MtQhkAAAohLDQEJdVr2ENAhkAAIqwSKSudg3rEMgAAFAIyWnZmZi46AirmxLUmNkXABBUjpxJkX7vLZfDp1OKdJyktExzHxPFpdRKnH0AQFBZs+ek/HE0ySPHii8RIXXKlfTIsVA4BDIAgKCSdn5G3la1ysjE21oU6VjlYyMlJpJLqZU4+wCAoJKanh3IxEWHS81yrFTt7yj2BQAEldTzGZmo8DCrmwIPIJABAATlsOnIcC6BgYB/RQBA0MjKssmLP2wxj6MIZAIC/4oAgKCx6UCiZJ5fI6lSXLTVzYEHEMgAAILG6XPpjsdDO11iaVvgGQQyAICgkXR+Nl4del2KiewCAv+KAICAdCQxRf7x6Ro5eibVsS3ZPhtvJCOWAgWBDAAgIC3ddVx+33sq19caVIr1entQPAhkAAABPYPv5TVLy+gbGzm2R4SFSqMqcRa2DJ5EIAMACEgZmdmjk8qWjJKWNctY3RwUE4p9AQABKSMrOyMTERZidVNQjAhkAAABnZEJD+NSF8gs/dcdP368tGnTRmJjY6VixYrSp08f2bZtm8s+nTp1kpCQEJfb0KFDLWszAMDPMjKhZGQCmaWBzKJFi2TYsGGyfPlymTdvnqSnp0u3bt0kKSnJZb97771XDh486Li9/PLLlrUZAOAf0h0ZGQKZQGZpse+cOXNcnn/00UcmM7NmzRq5+uqrHdtjYmKkcuXKFrQQAODvXUthoXQtBTKfGrV0+vRpc1+2bFmX7dOmTZNPP/3UBDO9evWS0aNHm+AmN6mpqeZml5iYWMytBgB4y6HTKY7ZeS/m2NnsawHFvoHNZwKZrKwsGTFihFx55ZXSpEkTx/Y77rhDatWqJVWrVpUNGzbIE088Yepovv766zzrbsaNG+fFlgMAvOHbdfvloenr3H5fOBmZgOYzgYzWyiQkJMhvv/3msv2+++5zPG7atKlUqVJFOnfuLLt27ZJLLsm54NeoUaNk5MiRLhmZGjVqFHPrAQDeWLlaRYaFSnREwYKTklHh0rVRpWJuGSTYA5nhw4fL7NmzZfHixVK9evV8923Xrp2537lzZ66BTFRUlLkBAAJLWkb2KKS/X1VHHu/R0OrmwEdYGsjYbDZ54IEHZObMmbJw4UKpU6fORd+zbl12WlEzMwCAYJzgjq4i+Eggo91Jn332mXz77bdmLplDhw6Z7fHx8VKiRAnTfaSvX3/99VKuXDlTI/Pwww+bEU3NmjWzsukAAItGIVG8C58JZCZNmuSY9M7ZlClTZNCgQRIZGSk///yzvP7662ZuGa116du3rzzzzDMWtRgAYPUikMzUC5/qWsqPBi46aR4AAP/LyBDI4H/4aQAA+AUWgYTPjloCAASv5LQMmb5yn5w+l57vflsPnTH3zAsDZwQyAABLzfx9vzw3e3OB94+N5tKF/+GnAQBgqSOJ2UsJXFqplLSt47pEzYXKl4qSLpcxwR3+h0AGAGB515Lq1KCiPHX9ZVY3B36GQAYA4PERqRPnbZddR5MKtH/CgewFg2Miw4q5ZQhEBDIAALdkZtlk9LcJ8sfRs7m+vml/opxJLdgK1c6qxpfwQOsQbAhkAABuSdh/Wj5bsbdA+z7Xu3GB9osvESE9mlQuYssQjAhkAABuOZOSnW2pVrqEPNkz98Ubw0ND5Ip65U2AAhQnAhkAgFuSzhfnVoyLkl7Nq1rdHAQ5ZhUCABTYtBV/yj8+WWMel4rib2FYj0AGAFBg360/4HjcvHppS9sCKMJpAECBpZ9fuHH0jY3knitrW90cgIwMAKDg0jOzF26sXS5GQkJYvBHWI5ABALidkYkI4/IB38BPIgCgwDLOZ2TCw8jGwDcQyAAACiwji4wMfAs/iQCAAkvLyM7IEMjAVzBqCQBguozW/HlSktMzC7RStc7cC/gCAhkAgHzw226Z8OPWAu8fHUFGBr6BQAYAIDsOZ69kXSU+WsqXisp33waVY6Vu+VJeahmQPwIZAAgimVk2mThvu+w7meyyfdXuE+b+gevqyx3talrUOsB9BDIAEETW7j0pby3Ymefr1cuU8Gp7gKIikAGAIHIqOd3cVytdQu7pWMfltYqxUdKxXnmLWgYUDoEMAASRpNTsUUe1y8fIkAsCGcAfEcgAgJ9L2H9anv4mwRGk5CfxXHZGJiaSX/8IDG7/JO/bt88sFFa9enXzfOXKlfLZZ59Jo0aN5L777iuONgIA8vHN7/tl/b5Tbr2nXkVGHSFIA5k77rjDBCx33XWXHDp0SLp27SqNGzeWadOmmedjxowpnpYCQJCvOv3tugNy/GxqjtdW7ckecTSgXU3p1bzqRY8VFR4qzaqXLpZ2Aj4fyCQkJEjbtm3N4xkzZkiTJk1kyZIlMnfuXBk6dCiBDAAUg/lbDsujX67Pd59WtcpI+7rlvNYmwC8DmfT0dImKyp4s6eeff5abbrrJPG7YsKEcPHjQ8y0EAMjxpDRzXzU+WtpfkjNY0UnsujeubEHLAD8LZLQbafLkyXLDDTfIvHnz5PnnnzfbDxw4IOXK8ZcAABSHjMzsVadb1Cwtr93WwurmAD7D7cUyXnrpJXn33XelU6dO0r9/f2nevLnZPmvWLEeXEwDA8zUyKjyUNY6AImVkNIA5duyYJCYmSpkyZRzbtQC4ZMmS7h4OAFDApQVUeBirTgPO3A7tr7vuOjlz5oxLEKPKli0rt99+u7uHAwAUQMb5QCaCjAzgwu3/IxYuXChpadlFZ85SUlLk119/dfdwAAB3upbIyACF61rasGGD4/HmzZvNnDF2mZmZMmfOHKlWrVpBDwcAKESxb3gogQxQqECmRYsWZkZfvWn30oVKlCghb775ZkEPBwAoRNdSeBhdS0ChApndu3eLzWaTunXrmmUJKlSo4HgtMjJSKlasKGFhYQU9HABARLYdOiOv/LRVktMy891vz7Ekc0/XElDIQKZWrVrmPisru58WAFB0n6/cKz9vOVLg/avERRdrewB/U6jlTz/55BMzKZ5maZYtW2aCnIkTJ5psTe/evT3fSgAIUMlp2StW39isinRtVCnffWOjw+Wq+v/LhgMoRCAzadIks57SiBEj5F//+pcp9FU6HPv1118nkAEAN6RlZGe5W9QoLb1bMGACcJfbVWNa0Pv+++/L008/7VIT07p1a9m4caPbDQCAYJZ6PpCJDKeIFygMt//P0e6kli1b5tiuC0kmJWUXowEA3MvIRBHIAN7pWqpTp46sW7fOUfxrp/PIXHbZZW4da/z48fL111/L1q1bzfDtK664wqzl1KBBA5eJ9h555BGZPn26pKamSvfu3eWdd96RSpXy70sGAKtqXv67dr+cTcmufbmYP86PRiIjA3gpkBk5cqQMGzbMBBg6HFuHYn/++ecmKPnggw/cOtaiRYvMsdq0aSMZGRny1FNPSbdu3cyEe/Z1mx5++GH5/vvv5csvv5T4+HgZPny4/O1vf5MlS5a423QAyNfuY0ny5ep9jjlbCuOjpXscWRZ3xEZFFPozgWAWYtNoxE3Tpk2TZ599Vnbt2mWeV61aVcaNGydDhgwpUmOOHj1q5qPRAOfqq6+W06dPm/lqPvvsM7nlllvMPpq90cyPjpZq3779RY+pi1tqAKTHiouLK1L7AAS2f366Rn5M+N+s5UV1S6vqBdqvUlyUPNi5vkSFMxcX4O71262MjGZNNKjQ7p0BAwZIcnKynD171gQfnqCNtS9AqdasWSPp6enSpUsXxz4NGzaUmjVr5hnIaPeT3pxPBAAUxPGz2evI6TDouuWzs8KFER8TIYOuqC0xkYWa4QKAG9z6vyw8PFyGDh0qW7ZsMc9jYmLMzRN0oj0d0n3llVdKkyZNzDZdz0lnDS5durTLvlof47zWkzPt4tLsEAC4K+n8nC4D2tWUTg088wcagOLldnVZ27Zt5ffff/d4Q7RWJiEhwRT1FsWoUaNMZsd+27dvn8faCCAwvbtolwyastLUyKhSUWRSAH/h9v+t999/vxlF9Ndff0mrVq0cRbl2zZo1c7sRWsA7e/ZsWbx4sVSv/r8+5cqVK0taWpqcOnXKJStz+PBh81pudBi43gCgIJJSM2T8j1sdz0NCRKqULmFpmwAUYyDTr18/c//ggw86tumK2FozrPf2mX4LQt/zwAMPyMyZM2XhwoVmaLczDZQiIiJk/vz50rdvX7Nt27ZtsnfvXunQoYO7TQeAPCekU6/c0kzqVigl1QhkgMANZHRCPE92J2nx8LfffiuxsbGOuhetUtZ5ZfReR0LpkG8tANaqZQ18NIgpyIglALiYjMzsQCY0ROTW1jWsbg6A4g5kLpwIryh03SbVqVMnl+1TpkyRQYMGmce6GGVoaKjJyDhPiAcAnpB+fs6Y8FAmpAOCIpCZNWtWrtu1Wyk6Olrq1auXo4soLwWZwkaP+fbbb5sbABRXRiY8LMTqpgDwRiDTp08fR02MM+c6mY4dO8o333xjVsQGAF9mn8U3XPuWAPgdt3Op8+bNM0sK6L19iLM+bteunWPk0fHjx+XRRx8tnhYDgAdlZGYHMhFhdC0BQZGReeihh+S9994zCzzade7c2XQB3XfffbJp0yZ5/fXX5Z577vF0WwHA49LpWgL8mtt/guj6SrmteaDb/vjjD/O4fv36cuzYMc+0EACKUSbFvkBwZWR0bpfHHntMpk6dahZ0tC/2+Pjjj5suJ7Vjxw6pUYNhjADcc9/U1TJvy2Gvfqa93I+MDBAkgcx//vMf6d27t5mB1x6s6DIAdevWNfPBKF1I8plnnvF8awEErJT0TJm72btBjLM2tbMXqwUQ4IFMgwYNZPPmzTJ37lzZvn27Y1vXrl3NfC/2kU0AAsOaP0/KXyeTi/1zEs+lm/uw0BBZ9uR1Il5MkISGhEi5kpHe+0AAHlOoldE0YOnRo4eZyE7XNdIh1wACz84jZ6TvpKVe/cwyMZFSMS7aq58JIIgCmaysLPnXv/4lkydPNos3alZGu5VGjx4ttWvXNksKAAgMfxzNXg06NjpcmlWPL/bPC5EQ6dOyWrF/DoAgDmReeOEF+fjjj+Xll1+We++917G9SZMmZtg1gQwQOMOS7/tkjXnculYZmTK4rdVNAoAc3B5vqKOVdB6ZAQMGSFhYmGN78+bNZevWre4eDoCP2nvif3Ux7eqWs7QtAOCxQGb//v1mPaXcupzS07OL9QAEzkRxaug1l1jaFgDwWCDTqFEj+fXXX3Ns/+qrr6Rly5buHg6Aj0/dX5nCWwCBVCMzZswYGThwoMnMaBbm66+/lm3btpkuJ11rCUBgYOp+AAGZkdHJ8L777jv5+eefpWTJkiaw2bJli9mmc8kACAzp5zMykSymCCBQMjIZGRny4osvmgUhdcVrAIErg4wMAD/g1p9a4eHhZti1BjQAAls6iykCCMQamc6dO8uiRYvM5HcArJeYki4r/jjhWMXZUzbuP2XuI8IJZAAEUCDTs2dPefLJJ2Xjxo1mJWytk3F20003ebJ9AC7ikRnrZV4xLrYYRSADIJACmfvvv9/cv/baazle0zWXMjMzPdMyAAXyx9Gz5r5BpVgpFV2o5dPypAs43ndVXY8eEwAsX2sJgHf8uuOoTF+5T7JseXcb/XXynLl/vV8LuaxKnBdbBwDW8+yfbwA86qU5WyVhf+JF94sIC2HiOgBBiUAG8LLktAxZteekZBYgu3ngVIq5H3btJVI5vkSe+11WOVbKlIz0aDsBwB8QyABesOVgomw6kJ1ZeXrmRknNcK+L9o52taRa6bwDGQAIVgQyQDFnXz5bsVde+H5Lrq83rx5/0WO0rFlGqsbTbQQAuSGQAYrR5yv3uQQxnRpUMPeXVCglT19/mYSGMmsuAHg9kNm1a5dMmTLF3P/73/+WihUryo8//ig1a9aUxo0bF6lBQCA5nJhd46Km3tNWrr40O5ABAHiG2zNd6ay+TZs2lRUrVpiVr8+ezZ7DYv369TJ27FgPNQsIDEmp2ct5jOhSnyAGAHwhI6Oz+r7wwgsycuRIiY2NdWy/7rrr5K233vJ0+wCfpssCvPXLTvnrZHKur6/ac8Lcl4ykFxcAioPbv111aYLPPvssx3btXjp27Jin2gX4hbV7T8rEn7dfdL+KcVFeaQ8ABBu3A5nSpUvLwYMHpU6dOi7bf//9d6lWrZon2wb4vJNJaeZeh0bf2b5WrvuUKxkpPZtU8XLLACA4uB3I9OvXT5544gn58ssvzdpKumTBkiVL5NFHH5W77767eFoJ+KjktOy1xeqULyn/7HSJ1c0BgKDjdiDz4osvyrBhw6RGjRpmgchGjRqZ+zvuuEOeeeaZ4mkl4EMOnDonj321Xk4kpcup5OyMTExkmNXNAoCg5HYgExkZKe+//76MHj1aEhISzKilli1bSv369YunhYCPmbf5sCzZedxlW90KpSxrDwAEM7cDmd9++006duxo5ozRGxBszp4fUn3NpRXk71fVkajwMLm8ZmmrmwUAQcnteWR0mLUW+j711FOyefPm4mkV4OPLDtjrYq6qX0Ha1ikr4WFu/68EALAiI3PgwAGZPn26fP755zJhwgRp1qyZDBgwQPr37y/Vq1f3RJsAS+w/dU5um7zMZTbe3GTabOa+VBRzwwCA1dz+M7J8+fIyfPhwM1JJlyi49dZb5eOPP5batWubbA3gr9b8edIEMxlZtnxvGseEhYbI5bXoTgIAqxXpT0rtYtKZfps3b26Kf3X5AsBfpWdkmft2dcrKv/u1zHffEpFhEl8iwkstAwB4PJDRjMy0adPkq6++kpSUFOndu7eMHz++sIcDLJeRleXoMqocH211cwAAxRHIjBo1ytTIaK1M165dzerXGsTExMS4eyjAp6RnZte+RFC4CwCBG8gsXrxYHnvsMbnttttMvQwQKNIzszMy4WEhVjcFAFBcgYx2KQGBKIOMDAAEZiAza9Ys6dmzp0RERJjH+bnppps81TbAq9LsGZlQMjIAEFCBTJ8+feTQoUNSsWJF8zgvuoikrrvkTjfVK6+8ImvWrDEras+cOdPl+IMGDTJDu511795d5syZU+DPAPKy70SybNx/2vF8y8FEcx8RTkYGAAIqkNEVrnN7XFRJSUlm6PY999wjf/vb33Ldp0ePHjJlyhTH86ioKI99PoJXZpZN+ry9RI4nZS/66CyKQAYAArdGZurUqXL77bfnCCjS0tLMaKa77767wMfS7iq95Uc/p3Llyu42E8jXufRMRxDTulYZCQ0JccwPc1vrGha3DgBQbIHM4MGDTZZEu5mcnTlzxrzmTiBTEAsXLjSfVaZMGTNz8AsvvCDlypXLc//U1FRzs0tMzO4uAJylnZ/8Tn3xjw5mpl4AgP9xO4dus9lMLcyF/vrrL4mPjxdP0oBJM0Dz58+Xl156ycwcrBmc/OpwdFI+bYf9VqMGf10jp9SMTEdhL0EMAARBRqZly5YmgNFb586dJTz8f2/VwGL37t0m8PCkfv36OR43bdrULFB5ySWXmCyNtiGvCftGjhzpkpEhmEFeGRnqYQAgSAIZ+2iidevWmZFDpUqVcrwWGRlpFo3s27evFKe6deuaSfh27tyZZyCjNTUUBENlZdkkKS0j19dOJqeb+0gCGQAIjkBm7Nix5l4DFi32jY72/lo02n11/PhxqVKlitc/G/4XxNw8aams33cq3/0IZAAgyIp9Bw4c6LEPP3v2rMmu2Gn3lGZ8ypYta27jxo0zWR4dtbRr1y55/PHHpV69eiYjBOTnTGrGRYMYdV3DSl5pDwDARwIZrYeZOHGizJgxQ/bu3WuGXTs7ceJEgY+1evVqufbaax3P7bUtGixNmjRJNmzYYCbEO3XqlFStWlW6desmzz//PF1HuKiM87P0qq3P5167pTXrUeFhXmwVAMDyQEazJB988IE88sgj8swzz8jTTz8te/bskW+++UbGjBnj1rE6depkRkHl5aeffnK3eYCRkZX9c6UjkqIjCFYAIFC5XSAwbdo0ef/9900goyOX+vfvbwIbDWKWL19ePK0ECruSNUOrASCguR3I6JpLOhRa6cil06ez16q58cYb5fvvv/d8C4FCLkGgCGQAILC5HchUr17dLPCodE6XuXPnmserVq2idgU+Iz3zfCATxqgkAAhkbv+Wv/nmm81Mu+qBBx6Q0aNHS/369c3SBLr4I+ALMs4vbhoRRkYGAAKZ28W+EyZMcDzW+WRq1qwpy5YtM8FMr169PN0+oFAy7BmZUDIyABDI3A5kLtShQwdzA3xp6PWCrUfMY9ZRAoDAVqBAZtasWQU+4E033VSU9gBFNmP1X/LqvO3mcXQEGRkAkGAPZOzrLF2MLiiZ38rUgDf8dTLZ8fjBzvUtbQsAwAcCmazzhZOAP61s/Y+r60rvFtWsbg4AoBiRd0fASTs/GV4UC0ICQMBzu9j3ueeey/d1d5cpAIorI8PK1gAQ+NwOZGbOnOnyPD093axarcsV6AR5BDIoqtSMTElJL3x35tnUDHPPgpAAEPjcDmR+//33HNsSExNl0KBBZrI8oCi2Hz4jf3tnqSMYKQoyMgAQ+Dzymz4uLs6siq2z/AJFsX7fKY8EMXHR4dK6dhmPtAkAEMAT4tnp4pH2BSSBwso4v9jjdQ0ryuQ7WxX6ODoRHpPhAUDgczuQeeONN1ye22w2s4jkJ598Ij179vRk2xCks/KqyLBQuoYAAJ4PZCZOnOjyPDQ0VCpUqCADBw6UUaNGuXs4II9Vq8mmAACKIZDREUpAcck837UUEUY2BgBwcVwt4FPSz88iHU59CwCgODIyKSkp8uabb8qCBQvkyJEjOZYvWLt2rbuHBBwyHF1LxNgAgGIIZIYMGSJz586VW265Rdq2bWsWigQ8XexLRgYAUCyBzOzZs+WHH36QK6+80t23Ahe1/q/sIfwU+wIACsLt/H21atUkNjbW3bcBF3U4MUUWbT9qHkdHsLwAAKAYAplXX31VnnjiCfnzzz/dfSuQr70nkh2P+15e3dK2AAACtGupdevWpuC3bt26EhMTIxERES6vnzhxwpPtg5+ZsWqf/LTpUKHeeywpzdw3rx4v9SqW8nDLAACByO1Apn///rJ//3558cUXpVKlShT7wsXzszfLmSKulVSzXEmPtQcAENjcDmSWLl0qy5Ytk+bNmxdPi+DXktMzzf0zN1wmcdGu2bqC0CLfaxtULIaWAQACkduBTMOGDeXcuXPF0xr4tawsm2Nm3r9dXl3Kloy0ukkAgADndrHvhAkT5JFHHpGFCxfK8ePHJTEx0eWG4GWflVcxfBoA4JMZmR49epj7zp0751gFW+tlMjOzuxYQvLPyqohQZuYFAPhgIKNLEwC5ST8/K6+KICMDAPDFQOaaa64pnpbA76U7ZWTCWGIAAOCLgczixYvzff3qq68uSnvgYxmWtAzXRUHzk5iS7sjGMCwfAOCTgUynTp1ybHO+aFEjExg2HTgtt7+7XM4WYk6YcOpjAABe4vYV5+TJky63I0eOyJw5c6RNmzZmVWwEhrV7TxUqiFHXNqzg8fYAAOCRjEx8fHyObV27dpXIyEgZOXKkrFmzxt1DwgdlnC/cvb5pZXntthZuvZcFHwEAPhvI5EWXK9i2bZunDgcfGUodFR5GYAIACJxAZsOGDTnmjzl48KCZKK9FC/f+cofvyjg/Q284o48AAIEUyGiwosW9GsA4a9++vXz44YeebBt8oGuJGXoBAAEVyOzevdvleWhoqFSoUEGio6M92S5YLN2RkWEEEgAggAKZWrVqFU9L4FPIyAAA/EGB/9z+5ZdfpFGjRrkuDHn69Glp3Lix/Prrr55uHyxiX8U6IoyMDADAdxX4KvX666/LvffeK3FxcbkOyf7HP/4hr732mqfbBy86mZQmcxIOyg8bD8qOI2fNNpYaAAAERCCzfv16x8rXuenWrZvbc8jocge9evWSqlWrmgLib775xuV1LSgeM2aMVKlSRUqUKCFdunSRHTt2uPUZKLjhn6+VoZ+ulfunrZVfth4x26LCycgAAHxXga9Shw8floiIiDxfDw8Pl6NHj7r14UlJSdK8eXN5++23c3395ZdfljfeeEMmT54sK1askJIlS0r37t0lJSXFrc9Bwew6kmTum1aLl7Z1ykqXyypKnxbVrG4WAABFL/atVq2aJCQkSL169fKcX0YzJ+7o2bOnueVGszHanfXMM89I7969zbapU6eaifc0c9OvXz+3Pgv50/N9IjnNPJ505+VSvUyM1U0CAMBzGZnrr79eRo8enWs25Ny5czJ27Fi58cYbxVN0mPehQ4dMd5JzLU67du1k2bJleb4vNTXVFCQ731CwCfDsK13HRuWdeQMAwC8zMpoZ+frrr+XSSy+V4cOHS4MGDcz2rVu3mq4hXfX66aef9ljDNIhRmoFxps/tr+Vm/PjxMm7cOI+1I1ikng9iVFQEdTEAgAALZDSAWLp0qfzzn/+UUaNGOWb21SJdrVvRYObCoMMK2jZdvNJOMzI1atSwtE3+wJ6NUZEMuQYABOKEeDoZ3g8//CAnT56UnTt3mmCmfv36UqZMGY83rHLlyo4iY+faG32e35pOUVFR5obCBTIRYSESypBrAICfKNSf3hq4tGnTRtq2bVssQYyqU6eOCWbmz5/vkl3R0UsdOnQols8MZqkZmeaebAwAIKCXKPCks2fPmsyOc4HvunXrpGzZslKzZk0ZMWKEvPDCCybro4GNFhvrnDN9+vSRYLV6zwn5aOkex8y7nnI2NcPcR0WEefS4AAAEbCCzevVqufbaax3P7bUtAwcOlI8++kgef/xxM9fMfffdJ6dOnZKOHTvKnDlzgnqByjd+2SmLt7s3X487KsbSLQcA8B8hNnvVboDS7igdtq3rQeW2vIK/uWXSUln950np37amNKrq2e+jlTEd65WX2uVLevS4AAAU1/Xb0owM3Jd+vkupc8OK0qWR9aPEAACwEpWdfiYjM3t0UXgYI4sAACCQ8TPp5wMZRhcBAEAg43cyMrO7lsIJZAAAIJDxN+lZ/5u4DgCAYEexbzHLyrJJpgcHhqVnZB8rgowMAAAEMsXp4Olz0uvNJXLsbKrHj02xLwAAdC0Vq9/3niqWIKZa6RJSqyxzvQAAQEamGCWdn/b/qvrl5a07LvfYcUtGhlHsCwAAgYznHDqdYrqSnO04ctbcx5WIkPgSERa1DACAwEUg4wF/Hk+S615dlOdCjppBAQAAnkcg4wFbD50xQUxkeKhUinNddDE6PEz6tKxmWdsAAAhkBDJFpAHMPz5ZYx7rgosfDmpjdZMAAAgaVIwW0bZDZxyPG1SOtbQtAAAEGwKZIjqZnOZ4/Gi3Bpa2BQCAYEMgU0SnktPNfdvaZSUslEnqAADwJgKZIkpJzzT3JRiZBACA1xHIFFFqRvYijlHhnEoAALyNq28RpWZkZ2SiIsjIAADgbQQyRURGBgAA63D1LaLUdAIZAACswtXXQ11LOqsvAADwLq6+HutaokYGAABvI5DxVLEvGRkAALyOq28RpdkzMhGcSgAAvI2rbxHRtQQAgHUIZIqIUUsAAFiHq28RpWVmBzKRYZxKAAC8jatvEWVk2cw9C0YCAOB9BDJFlEUgAwCAZQhkiijzfCATSiADAIDXEcgUUabtfEYmhEAGAABvI5DxWNeS1S0BACD4cPn1UEYmlIwMAABeRyDjoRqZ8DACGQAAvI1AxlPFvmRkAADwOgIZDwUyDL8GAMD7CGSKKItRSwAAWIZApoiYRwYAAOsQyBTR+TiGriUAACxAIFNEFPsCAGAdAhlPDb8mIwMAgNcRyBQRo5YAALCOTwcyzz77rISEhLjcGjZsKL6EmX0BALBOuPi4xo0by88//+x4Hh4e7qNrLRHIAADgbb4VFeRCA5fKlSuLz69+7dO5LQAAApPPX3537NghVatWlbp168qAAQNk79694ksYtQQAgHV8OiPTrl07+eijj6RBgwZy8OBBGTdunFx11VWSkJAgsbGxub4nNTXV3OwSExOLtY10LQEAYB2fDmR69uzpeNysWTMT2NSqVUtmzJghQ4YMyfU948ePNwGPt2QQyAAAYBmf71pyVrp0abn00ktl586dee4zatQoOX36tOO2b98+76y1RCADAIDX+VUgc/bsWdm1a5dUqVIlz32ioqIkLi7O5eaVeWSokQEAwOt8OpB59NFHZdGiRbJnzx5ZunSp3HzzzRIWFib9+/cXX2Cz2RxrLbFoJAAA3ufTNTJ//fWXCVqOHz8uFSpUkI4dO8ry5cvNY19gD2IUGRkAALzPpwOZ6dOniy+zdyspMjIAAHifT3ct+Tp7oa+i2BcAAO8jkPHA0GvF6tcAAHgfgYynupaokQEAwOsIZDwwq6+iawkAAO8jkPHAgpGKOAYAAO8jkPFARkaDmBC6lgAA8DoCGQ9kZOhWAgDAGgQyHij2pdAXAABrEMh4IJBh6DUAANYgkPFERoZABgAASxDIeCCQiQjjNAIAYAWuwEWQlpll7iPCyMgAAGAFApkiSMuwBzKcRgAArMAVuAjSM7O7liIJZAAAsARX4CJId3QtcRoBALACV2BP1MiEUyMDAIAVCGSKIJ0aGQAALMUV2BMZmVBOIwAAVuAKXASp6dmBTFQEpxEAACtwBS6C1PNdS1HhYVY3BQCAoEQgUwQp6ZnmPpqMDAAAluAKXARkZAAAsBaBTBGQkQEAwFpcgYuAjAwAANYikCkCMjIAAFiLK7AHMjLREWRkAACwAoFMEaSez8hEhXMaAQCwAlfgIiAjAwCAtQhkPFAjQ0YGAABrcAUuAjIyAABYi0CmCMjIAABgLa7ARUBGBgAAaxHIFAEZGQAArMUV2BMz+5KRAQDAEgQyRcDMvgAAWIsrcBGw1hIAANYikCkCMjIAAFiLK3Ah2Ww2MjIAAFiMQKaQ7EGMIiMDAIA1uAJ7IJAhIwMAgDUIZArpcGKKuQ8NEYkIC7G6OQAABCUCmUJ66cetjmxMSAiBDAAAViCQKaTqZUqYGX37tKxqdVMAAAhaITYdfhPAEhMTJT4+Xk6fPi1xcXFWNwcAAHjw+u0XGZm3335bateuLdHR0dKuXTtZuXKl1U0CAAA+wOcDmS+++EJGjhwpY8eOlbVr10rz5s2le/fucuTIEaubBgAALObzgcxrr70m9957rwwePFgaNWokkydPlpiYGPnwww+tbhoAALCYTwcyaWlpsmbNGunSpYtjW2hoqHm+bNmyXN+Tmppq+tWcbwAAIDD5dCBz7NgxyczMlEqVKrls1+eHDh3K9T3jx483xUH2W40aNbzUWgAA4G0+HcgUxqhRo0yFs/22b98+q5sEAACKSbj4sPLly0tYWJgcPnzYZbs+r1y5cq7viYqKMjcAABD4fDojExkZKa1atZL58+c7tmVlZZnnHTp0sLRtAADAej6dkVE69HrgwIHSunVradu2rbz++uuSlJRkRjEBAIDg5vOBzO233y5Hjx6VMWPGmALfFi1ayJw5c3IUAAMAgODDEgUAAMDnBNQSBQAAALkhkAEAAH6LQAYAAPgtny/2LSp7CRBLFQAA4D/s1+2LlfIGfCBz5swZc89SBQAA+Od1XIt+g3bUkk6gd+DAAYmNjZWQkBCPRooaHOkSCIyGKl6ca+/gPHsH59k7OM/+f541PNEgpmrVqmbB6KDNyOiXr169erEdX//h+J/EOzjX3sF59g7Os3dwnv37POeXibGj2BcAAPgtAhkAAOC3CGQKSVfYHjt2LCttewHn2js4z97BefYOznPwnOeAL/YFAACBi4wMAADwWwQyAADAbxHIAAAAv0UgAwAA/BaBTCG9/fbbUrt2bYmOjpZ27drJypUrrW6ST1u8eLH06tXLzNCoMyx/8803Lq9rzfmYMWOkSpUqUqJECenSpYvs2LHDZZ8TJ07IgAEDzKRLpUuXliFDhsjZs2dd9tmwYYNcddVV5t9FZ5t8+eWXJViMHz9e2rRpY2axrlixovTp00e2bdvmsk9KSooMGzZMypUrJ6VKlZK+ffvK4cOHXfbZu3ev3HDDDRITE2OO89hjj0lGRobLPgsXLpTLL7/cjFSoV6+efPTRRxJMJk2aJM2aNXNMAtahQwf58ccfHa9znj1vwoQJ5nfHiBEjHNs4z57x7LPPmnPrfGvYsKH/nGcdtQT3TJ8+3RYZGWn78MMPbZs2bbLde++9ttKlS9sOHz5sddN81g8//GB7+umnbV9//bWOkrPNnDnT5fUJEybY4uPjbd98841t/fr1tptuuslWp04d27lz5xz79OjRw9a8eXPb8uXLbb/++qutXr16tv79+zteP336tK1SpUq2AQMG2BISEmyff/65rUSJErZ3333XFgy6d+9umzJlivnu69ats11//fW2mjVr2s6ePevYZ+jQobYaNWrY5s+fb1u9erWtffv2tiuuuMLxekZGhq1Jkya2Ll262H7//Xfz71a+fHnbqFGjHPv88ccftpiYGNvIkSNtmzdvtr355pu2sLAw25w5c2zBYtasWbbvv//etn37dtu2bdtsTz31lC0iIsKce8V59qyVK1faateubWvWrJntoYcecmznPHvG2LFjbY0bN7YdPHjQcTt69KjfnGcCmUJo27atbdiwYY7nmZmZtqpVq9rGjx9vabv8xYWBTFZWlq1y5cq2V155xbHt1KlTtqioKBOMKP3B1/etWrXKsc+PP/5oCwkJse3fv988f+edd2xlypSxpaamOvZ54oknbA0aNLAFoyNHjphztmjRIsc51Yvtl19+6dhny5YtZp9ly5aZ5/oLKDQ01Hbo0CHHPpMmTbLFxcU5zuvjjz9ufuk5u/32200gFcz0Z++DDz7gPHvYmTNnbPXr17fNmzfPds011zgCGc6zZwOZ5s2b5/qaP5xnupbclJaWJmvWrDFdH87rOenzZcuWWdo2f7V79245dOiQyznV9TW0y85+TvVeu5Nat27t2Ef3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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(42)\n",
    "epsilon_greedy_solver = EpsilonGreedy(bandit_10_arm,epsilon=0.01)\n",
    "epsilon_greedy_solver.run(5000)\n",
    "print('epsilon-贪婪算法的累积懊悔为：', epsilon_greedy_solver.regret)\n",
    "plot_results([epsilon_greedy_solver], [\"EpsilonGreedy\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "734f923d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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PC0tDTExMWq7Zs2axm4SEVGVxoCoDIbJtMGQp6ensZtDZsTBwUH9lKBIfv84fEZEdPeYVH2PtDlD0jNEVNG0v3fMXSMiujcMiMoIh8nIGPh7R0RUNhgQERERkdljQETlZtOmTaoHQzv77pdfflGzooiIiCobBkRUbjp06IBr167Bzc0NlcnChQvRoEED2Nvbo0mTJlixYkWJgrsWLVrAzs4OdevWVcFdQd9++y2Cg4PV87Zt2xZ79uwxOJ6RkYGxY8eq5HtnZ2cMGTIE0dHRBue89NJLaNmypXqdZs2alcG7JSKikmBAROXG1ta20tXI2bFjB4YPH45nnnkGBw8exKBBg9Tt2LFjxT4mPDwc/fv3R7du3XDo0CFMnDgRzz77LFavXq07588//8TkyZMxdepUHDhwAGFhYejdu7duWryYNGkS/v33XxWQbd68GVevXsVDDz1U6PWefvppDBs2rBzePRFR5XTlVByyM3ON2wgN3VFiYqJGPir5WVB6errmxIkT6mdVlJubq5k2bZomODhYY29vr2natKlm4cKF6tjGjRvV+162bJmmSZMmGjs7O03btm01R48e1T3+4sWLmgEDBmiqVaumcXR01DRq1EizfPlyg8fHx8er7Tlz5mjc3NwMXv+7777T1K5dW2NjY6OpX7++Zu7cuQbH5fGzZ8/WDBo0SOPg4KCpW7eu5p9//rnr9zt06FBN//79DfbJe3rhhReKfcyrr76qCQ0NNdg3bNgwTe/evXXbbdq00YwdO9bgc/X19dVMnz5dbSckJKj3qP1sxcmTJ9X727lzZ6HXnDp1qiYsLOyO76eq//4RER3fFqn55oX1mrlvbdekJGRU2PW7IPYQlVfRvKwco9zyY4iSmz59OubOnYtZs2bh+PHjqhfj8ccfVz0YWq+88go+//xz7N27F97e3hg4cKBumrcMAWVmZmLLli04evQoPv74YzUcVBKLFy/GhAkTMGXKFNVD88ILL2DUqFHYuHGjwXnvvfcehg4diiNHjqBfv34YMWIE4uLidMfl9W53Gz16tO7cnTt3okePHgbPLz05sr84d3pMVlYW9u/fb3COpaWl2taeI8flM9M/R4btAgMDb/vaRESmKiEmDWv+dxwbfzultt19nODoamu09rAwYzlIz85Fo3dvDadUpBPv94ajbcn+WSWQmTZtGtatW4f27dur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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epsilons = [1e-4,0.01,0.1,0.25,0.5]\n",
    "epsilon_greedy_solver_list=[\n",
    "    EpsilonGreedy(bandit_10_arm,epsilon=e) for e in epsilons\n",
    "]\n",
    "epsilon_greedy_solver_names = [\"epsilon={}\".format(e) for e in epsilons]\n",
    "for solver in epsilon_greedy_solver_list:\n",
    "    solver.run(5000)\n",
    "plot_results(epsilon_greedy_solver_list,epsilon_greedy_solver_names)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "300105bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "class DecayingEpsilonGreedy(Solver):\n",
    "    # epsilon 贪婪算法, 继承 solver 类\n",
    "    def __init__(self, bandit,init_epsilon=0.01,init_prob=1.0):\n",
    "        super().__init__(bandit)\n",
    "        self.epsilon = init_epsilon\n",
    "        # 初始化拉动所有拉杆的期望奖励估值\n",
    "        self.estimates = np.array([init_prob] *self.bandit.K)\n",
    "        self.step=1\n",
    "\n",
    "    def run_one_tier(self):\n",
    "        if np.random.random() < self.epsilon/self.step:\n",
    "            k = np.random.randint(0,self.bandit.K) # 随机选择一根拉杆\n",
    "        else:\n",
    "            k = np.argmax(self.estimates) # 选择期望奖励估值最大的拉杆\n",
    "        r = self.bandit.step(k) # 得到本次动作的奖励\n",
    "        self.estimates[k] += 1./(self.counts[k]+1)*(r-self.estimates[k])\n",
    "        # step增加\n",
    "        self.step += 1\n",
    "        return k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "e497c4e6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epsilon-贪婪算法的累积懊悔为： 9.989353503976956\n"
     ]
    },
    {
     "data": {
      "image/png": "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AQAAAYsgAwAAAhZBBgAABCyCDAAACFgEGQAAELAIMgAAIGARZAAAQMAiyADwmgcffFC6dOlidzMAhBB2vwaQKbly5crw8REjRphNE/1tjc0lS5bIjTfeKCdOnDCb4QEILgQZAJly6NAh5/3PP/9chg8fbjaPc8iXL5+5AYAvMbQEIFN0h3LHLTY21vTQuB7TEJNyaKlVq1byxBNPyIABA8wO5CVKlJApU6bIuXPnpGfPnpI/f36pXLmyzJs3z+29tmzZIh07djSvqc+5//775fjx4+m2be/evdKpUyfzHnnz5pWaNWvK3Llz5c8//zS9MUof0zZrGx27VY8ZM8bsEp47d26pW7eufPnll249OXr+d999J3Xq1JGYmBi5/vrrTduu9r4AfIcgAyBHffTRR1K0aFFZs2aNCTWPP/643HXXXdKsWTP59ddfpV27diaonD9/3px/8uRJuemmm6R+/fqybt06mT9/vhw5ckTuvvvudN+jb9++Eh8fL8uWLZPNmzfLuHHjTAiKi4uTr776ypyjvUfaq6TDX0pDzLRp0+Ttt9+WrVu3ylNPPSX33XefLF261O21Bw8eLK+99pqsXbtWihUrZoJLQkJChu8LwIe8svUkgJCiu9bGxsamOq67md92221uuxXrbuQOiYmJVt68ea3777/feUx30dW/ilauXGm+f+mll6x27dq5ve7+/fvNOSl3RHeoXbu29eKLL2a48/qJEyecxy5evGh28V2xYoXbub179zY7rLs+b/r06W47sOvuvp9//vlV3xeAb1AjAyBH6bCMQ3h4uBQpUkRq167tPKZDR+ro0aPm68aNG2Xx4sVp9mzs3r1brr322lTHn3zySdPTs2DBAmnTpo3ccccdbu+b0q5du0wPUNu2bd2OX7p0yfQEuWratKnzfuHChaVq1ary22+/efS+ALyPoSUAOSoyMtLte607cT3mmA2lNSvq7NmzZvhmw4YNbredO3dKy5Yt03yPhx56SP744w8zRKVDPA0bNpSJEyem2yZ9D6X1L67vsW3bNrc6mavJ6vsC8D6CDAC/ct1115malQoVKphCYNebFtSmR+thHnvsMfn6669l0KBBpqhYRUVFma9JSUnOc2vUqCHR0dGyb9++VO+hr+Nq1apVzvs6hXvHjh1SvXr1q74vAN8gyADwK1pA+88//0i3bt1Mga0OJ33//fdmlpNrGHGls6L0nD179pgCYh2acoSN8uXLm16fOXPmyLFjx0xvjM6Wevrpp02BrxYj63vo87Q3Rb93NWrUKFm0aJGZraQznrRw2TEzK6P3BeAbBBkAfqV06dLy888/m9CiM5q0nkYDgy5mFxaW9l9Zeq4GIA0RHTp0MHU0b731lnmsTJkyMnLkSBkyZIipx+nXr585/tJLL8mwYcPM7CXH83SoSadjuxo7dqz0799fGjRoIIcPH5Zvv/3WrZcnvfcF4Bu5tOLXR+8FAAGDFYGBwECPDAAACFgEGQAAELAYWgIAAAGLHhkAABCwCDIAACBgEWQAAEDAIsgAAICARZABAAABiyADAAACFkEGAAAELIIMAAAIWAQZAAAgger/Az4J9kpmNLuoAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(1)\n",
    "epsilon_greedy_solver = DecayingEpsilonGreedy(bandit_10_arm,init_epsilon=1)\n",
    "epsilon_greedy_solver.run(5000)\n",
    "print('epsilon-贪婪算法的累积懊悔为：', epsilon_greedy_solver.regret)\n",
    "plot_results([epsilon_greedy_solver], [\"EpsilonGreedy\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20af3435",
   "metadata": {},
   "source": [
    "# UCB\n",
    "- 引入\"不确定性度量\"\n",
    "- 上置信界（upper confidence bound，UCB）算法\n",
    "霍夫丁不等式（Hoeffding's inequality）:\n",
    "![](https://raw.githubusercontent.com/HG-Wang/oos/master/note/202509162049985.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "3a3205aa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "UCB算法的累计懊悔为 90.72686662758642\n"
     ]
    },
    {
     "data": {
      "image/png": "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R2xsrJNKCwAAnK1CB5nSULU3qamp1kdcXJzRRQIAAJ7YtBQeHi4+Pj6SmJhoc1w9j44uvm9KQECAfgAAAPdXoWtk/P39pV27drJkyRLrsYKCAv28S5cuhpYNAAAYr0LXyChq6PXQoUOlffv20rFjR3n33XclPT1dj2ICAACercIHmbvvvltOnz4tEydO1B1827RpIwsXLizSARgAAHgeL5PJZBI3poZfq9FLquNv5cqVjS4OAABw4Od3he4jAwAAcCUEGQAA4LIIMgAAwGURZAAAgMsiyAAAAJdFkAEAAC6LIAMAAFxWhZ8Qr6ws0+So8egAAMA1WD63rzbdndsHmfPnz+ttbGys0UUBAACl+BxXE+N57My+apHJU6dOSaVKlcTLy8uhSVGFo7i4OGYMLmfca+fgPjsH99k5uM+uf59VPFEhpmbNmuLt7e25NTLqm69Vq1a5XV/94PiPxDm4187BfXYO7rNzcJ9d+z5fqSbGgs6+AADAZRFkAACAyyLIlFJAQIBMmjRJb1G+uNfOwX12Du6zc3CfPec+u31nXwAA4L6okQEAAC6LIAMAAFwWQQYAALgsggwAAHBZBJlSev/996Vu3boSGBgonTp1kvXr1xtdpApt5cqVctttt+kZGtUMyz///LPN66rP+cSJE6VGjRoSFBQkvXr1kgMHDticc+7cORkyZIiedKlKlSoyfPhwuXDhgs0527dvl+uvv17/XNRsk2+++aZ4iilTpkiHDh30LNaRkZEyaNAg2bdvn805WVlZMmrUKKlevbqEhobK7bffLomJiTbnHD9+XG655RYJDg7W13n66aclLy/P5pzly5fLtddeq0cqNGjQQL744gvxJB9++KG0atXKOglYly5dZMGCBdbXuc+ON3XqVP23Y+zYsdZj3GfHeOmll/S9Lfxo0qSJ69xnNWoJ9vn2229N/v7+ps8++8y0a9cu04gRI0xVqlQxJSYmGl20Cuu3334zvfDCC6Y5c+aoUXKmn376yeb1qVOnmsLCwkw///yzadu2baYBAwaY6tWrZ8rMzLSe069fP1Pr1q1Na9euNa1atcrUoEED0+DBg62vp6ammqKiokxDhgwx7dy50/TNN9+YgoKCTP/5z39MnqBv376mzz//XH/vW7duNd18882m2rVrmy5cuGA955FHHjHFxsaalixZYtq4caOpc+fOpq5du1pfz8vLM7Vo0cLUq1cv05YtW/TPLTw83DR+/HjrOYcPHzYFBwebnnzySdPu3btN06dPN/n4+JgWLlxo8hRz5841zZ8/37R//37Tvn37TM8//7zJz89P33uF++xY69evN9WtW9fUqlUr05gxY6zHuc+OMWnSJFPz5s1N8fHx1sfp06dd5j4TZEqhY8eOplGjRlmf5+fnm2rWrGmaMmWKoeVyFZcGmYKCAlN0dLTprbfesh5LSUkxBQQE6DCiqF989XUbNmywnrNgwQKTl5eX6eTJk/r5Bx98YKpataopOzvbes6zzz5raty4sckTJSUl6Xu2YsUK6z1VH7bff/+99Zw9e/boc9asWaOfqz9A3t7epoSEBOs5H374oaly5crW+/rMM8/oP3qF3X333TpIeTL1u/fJJ59wnx3s/PnzpoYNG5oWL15suvHGG61Bhvvs2CDTunXrYl9zhftM05KdcnJyZNOmTbrpo/B6Tur5mjVrDC2bqzpy5IgkJCTY3FO1voZqsrPcU7VVzUnt27e3nqPOV/d+3bp11nNuuOEG8ff3t57Tt29f3bySnJwsniY1NVVvq1Wrprfq9zY3N9fmPqvq49q1a9vc55YtW0pUVJTNPVQLw+3atct6TuFrWM7x1N///Px8+fbbbyU9PV03MXGfHUs1aagmi0vvBffZsQ4cOKCb/uvXr6+b8FVTkavcZ4KMnc6cOaP/cBX+gSnqufowhv0s9+1K91RtVbtrYb6+vvpDuvA5xV2j8Ht4CrXqu+pL0K1bN2nRooX1HqiQpwLhle7z1e7h5c5Rf7QyMzPFU+zYsUP3F1Dt/Y888oj89NNP0qxZM+6zA6mAuHnzZt3/61LcZ8fp1KmT7q+ycOFC3f9L/eNS9TVUK0+7wn12+9WvAU+k/hW7c+dO+eOPP4wuittq3LixbN26Vdd8/fDDDzJ06FBZsWKF0cVyG3FxcTJmzBhZvHix7ryP8tO/f3/rvurEroJNnTp1ZPbs2XrwRUVHjYydwsPDxcfHp0iPbfU8OjrasHK5Mst9u9I9VdukpCSb11WPeDWSqfA5xV2j8Ht4gtGjR8u8efNk2bJlUqtWLetxdQ9U02hKSsoV7/PV7uHlzlGjd1zhj56jqH+lqpEX7dq10zUGrVu3ln/961/cZwdRTRrqv3k1ykXVvqqHCorvvfee3lf/muc+lw9V+9KoUSM5ePCgS/w+E2RK8cdL/eFasmSJTTW+eq7ax2G/evXq6V/ywvdUVTeqvi+We6q26j8k9cfNYunSpfreq389WM5Rw7xVe66F+tec+pdz1apVxd2pftQqxKgmDnVv1H0tTP3e+vn52dxn1X9ItYUXvs+qyaRwaFT3UP2xUc0mlnMKX8Nyjqf//qvfxezsbO6zg/Ts2VPfI1XrZXmoPnKq/4Zln/tcPtS0FocOHdLTYbjE73OZuwt76PBrNaLmiy++0KNpHnroIT38unCPbRQdeaCG5amH+rWbNm2a3j927Jh1+LW6h7/88otp+/btpoEDBxY7/Lpt27amdevWmf744w89kqHw8GvVu14Nv77//vv1MFj1c1LD/Txl+PWjjz6qh7AvX77cZhhlRkaGzTBKNSR76dKlehhlly5d9OPSYZR9+vTRQ7jV0MiIiIhih1E+/fTTevTC+++/73HDVZ977jk9GuzIkSP691U9VyPoFi1apF/nPpePwqOWFO6zY4wbN07/3VC/z3/++aceRq2GT6uRj65wnwkypaTGwKsfrJpPRg3HVnOb4PKWLVumA8ylj6FDh1qHYE+YMEEHERUSe/bsqefnKOzs2bM6uISGhuphfcOGDdMBqTA1B811112nrxETE6MDkqco7v6qh5pbxkIFw5EjR+qhwuqPyt/+9jcddgo7evSoqX///noOHvXHTP2Ry83NLfLzbNOmjf79r1+/vs17eIIHH3zQVKdOHf39qz/Y6vfVEmIU7rNzggz32THUMOgaNWro71/93VTPDx486DL32Uv9X9nrdQAAAJyPPjIAAMBlEWQAAIDLIsgAAACXRZABAAAuiyADAABcFkEGAAC4LIIMAABwWQQZAA7zwAMPyKBBg4wuBgAPwurXAErEy8vriq9PmjRJL5pY0ebYXL58udx0002SnJysF8MD4F4IMgBKJD4+3rr/3XffycSJE/XicRahoaH6AQDORNMSgBJRK5RbHmFhYbqGpvAxFWIubVrq3r27PPbYYzJ27Fi9AnlUVJTMmDFD0tPTZdiwYVKpUiVp0KCBLFiwwOa9du7cKf3799fXVF9z//33y5kzZy5btmPHjsltt92m3yMkJESaN28uv/32mxw9elTXxijqNVVmVUbLatVTpkzRq4QHBQVJ69at5YcffrCpyVHnz58/X1q1aiWBgYHSuXNnXbarvS8A5yHIAChXX375pYSHh8v69et1qHn00UflzjvvlK5du8rmzZulT58+OqhkZGTo81NSUqRHjx7Stm1b2bhxoyxcuFASExPlrrvuuux7jBo1SrKzs2XlypWyY8cOeeONN3QIio2NlR9//FGfo2qPVK2Sav5SVIiZOXOmfPTRR7Jr1y554okn5L777pMVK1bYXPvpp5+Wt99+WzZs2CARERE6uOTm5l7xfQE4kUOWngTgUdSqtWFhYUWOq9XMBw4caLNasVqN3CIvL88UEhJiuv/++63H1Cq66k/RmjVr9PNXX33V1KdPH5vrxsXF6XMuXRHdomXLlqaXXnrpiiuvJycnW49lZWXpVXxXr15tc+7w4cP1CuuFv+7bb7+1WYFdre773XffXfV9ATgHfWQAlCvVLGPh4+Mj1atXl5YtW1qPqaYjJSkpSW+3bdsmy5YtK7Zm49ChQ9KoUaMixx9//HFd07No0SLp1auX3H777Tbve6mDBw/qGqDevXvbHM/JydE1QYV16dLFul+tWjVp3Lix7Nmzp1TvC8DxaFoCUK78/Pxsnqt+J4WPWUZDqT4ryoULF3TzzdatW20eBw4ckBtuuKHY9/jnP/8phw8f1k1Uqomnffv2Mn369MuWSb2Hovq/FH6P3bt32/STuRp73xeA4xFkAFQo1157re6zUrduXd0RuPBDdai9HNUf5pFHHpE5c+bIuHHjdKdixd/fX2/z8/Ot5zZr1kwCAgLk+PHjRd5DXaewtWvXWvfVEO79+/dL06ZNr/q+AJyDIAOgQlEdaM+dOyeDBw/WHWxVc9Lvv/+uRzkVDiOFqVFR6pwjR47oDsSqacoSNurUqaNrfebNmyenT5/WtTFqtNRTTz2lO/iqzsjqPdTXqdoU9bywV155RZYsWaJHK6kRT6rjsmVk1pXeF4BzEGQAVCg1a9aUP//8U4cWNaJJ9adRgUFNZuftXfyfLHWuCkAqRPTr10/3o/nggw/0azExMfLyyy/Lc889p/vjjB49Wh9/9dVXZcKECXr0kuXrVFOTGo5d2NSpU2XMmDHSrl07SUhIkF9//dWmludy7wvAObxUj18nvRcAuAxmBAZcAzUyAADAZRFkAACAy6JpCQAAuCxqZAAAgMsiyAAAAJdFkAEAAC6LIAMAAFwWQQYAALgsggwAAHBZBBkAAOCyCDIAAMBlEWQAAIC4qv8HPbcuUc/d2sUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "class UCB(Solver):\n",
    "    def __init__(self,bandit:BernoulliBandit,coef,init_prob=1.0):\n",
    "        super().__init__(bandit)\n",
    "        self.total_count=0\n",
    "        self.estimates = np.array([init_prob]*self.bandit.K)\n",
    "        self.coef = coef\n",
    "    \n",
    "    def run_one_tier(self):\n",
    "        self.total_count += 1\n",
    "        ucb = self.estimates + self.coef*np.sqrt(\n",
    "            np.log(self.total_count)/(2*(self.counts)+1) \n",
    "        ) # 计算上置信界\n",
    "        k = np.argmax(ucb) #选出上置信界最大的拉杆\n",
    "        r = self.bandit.step(k)\n",
    "        self.estimates[k] += 1.0/(self.counts[k]+1)*(r - self.estimates[k])\n",
    "        return k\n",
    "\n",
    "np.random.seed(1)\n",
    "coef = 1 #控制不确定性比重的系数\n",
    "UCB_solver = UCB(bandit_10_arm,coef)\n",
    "UCB_solver.run(5000)\n",
    "print('UCB算法的累计懊悔为',UCB_solver.regret)\n",
    "plot_results([UCB_solver],[\"UCB\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44de0d63",
   "metadata": {},
   "source": [
    "# 汤普森采样算法\n",
    "[汤普森采样算法](https://hrl.boyuai.com/chapter/1/%E5%A4%9A%E8%87%82%E8%80%81%E8%99%8E%E6%9C%BA#26-%E6%B1%A4%E6%99%AE%E6%A3%AE%E9%87%87%E6%A0%B7%E7%AE%97%E6%B3%95)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "67566105",
   "metadata": {},
   "outputs": [],
   "source": [
    "class ThompsonSampling(Solver):\n",
    "    # 汤普森采样算法, 集成 Solver类\n",
    "    def __init__(self,bandit:BernoulliBandit):\n",
    "        super().__init__(bandit)\n",
    "        self._a = np.ones(self.bandit.K) # 列表, 表示每根拉杆奖励为1的次数\n",
    "        self._b = np.ones(self.bandit.K) # 列表, 表示每根拉杆奖励为0的次数\n",
    "\n",
    "    def run_one_tier(self):\n",
    "        samples = np.random.beta(self._a,self._b)\n",
    "        k = np.argmax(samples)\n",
    "        r = self.bandit.step(k)\n",
    "\n",
    "        self._a[k] += r # 更新Beta分布的第一个参数\n",
    "        self._b[k] += 1-r #更新Beta分布的第二个参数\n",
    "        return k\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "735a4b88",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "汤普森采样算法的累计懊悔为:  22.92250823023943\n"
     ]
    },
    {
     "data": {
      "image/png": "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RT7P6/o0SmcWaYB44YUXfHpztJekOGj7tehXe410tlVu6tSpI5s3bzYBwTt8bN++PV+fuWPHDp9gp8W6Gk60AFhpYa/2cs2ZM8ent0XDX0Fp2/VzM8tL2zMHLcBpqJEBSrBBgwbJ3LlzzSwgt8WLF8uvv/5qZg+562U0JHhfdOjD3ZuQuedg2rRpJlgUB/18/R60TkZDSmbeQ2JXX321WRzOPa1b6bBPTkNSOZk+fXqW71f17dvX0yaVeZhNe64KStuuM6Q0YHp/bzqr60Lca/UUV7gEAg09MoAN/etf/zInLj1xu3sJdA0VpcNB7hqNhx9+WD7++GMztVfXQ9GVfXWKc4sWLcy6IxeiU6Z1CrO+nxatak2IrvOi66sUl6lTp5reDq0h0WJibcfx48dNka+2RW8rfU6Py2233WYWANShNW175iniF7J7924zrVq3ddDv9//+7//M1HB3L1WvXr3MUJIWIP/tb38zx/Stt94ya8pkN4yXFw888IBpq36m/pzc06+1p0bX38mN1vBo4fQbb7xheq/0a/VY5VSvBJQ4Vk+bApB/7mm92V28p+qqzZs3u3r16uUqVaqUKzY21jV06FDXwYMH8/Q5J06ccI0YMcJVsWJFV5kyZcwUY506rZ8/bNiwLNOvdSpwZjpVuFmzZtl+D9dcc02Wx/V9Ro8e7fPYoUOHzGO1atVyhYWFuapWrerq3r2768033/R53d69e830af1etc1jx451LViwIF/Tr7du3eq64YYbXGXLlnWVK1fONWbMGNe5c+d8XjtnzhxXy5YtXZGRka66deu6nn32Wde7776b5fjn9D1mnkKtNm3aZB7T96xRo4brqaeecr3zzjsXnH6tvvjiC1fTpk1doaGhTMWG4wTpf6wOUwAAAAVBjQwAALAtggwAALAtggwAALAtggwAALAtggwAALAtggwAALCtEr8gni4trouG6UJRLOUNAIA96Oowp0+flurVq5uNWx0bZDTEZN5hFwAA2INusVKzZk3nBhntiXEfiOjoaKubAwAA8uDUqVOmI8J9HndskHEPJ2mIIcgAAGAvFyoLodgXAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYVonfNBIAALuIO5sspxOTxW5iS4VL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X2fQLVy40DzPcS4a3rOWFMfZP8aPH2/+bujv84oVK8w0ap0+rTMf7XCcCTIFpHPg9Qer68nodGxd2wQ5W7JkiQkwmS/Dhg3zTMGeNGmSCSIaErt3727W5/B27NgxE1zKlCljpvWNGDHCBCRvugZNly5dzHvUqFHDBCSnyO746kXXlnHTYDhq1CgzVVj/qAwcONCEHW979uxx9e3b16zBo3/M9I9ccnJylp9n69atze9//fr1fT7DCW6//XZXnTp1zPevf7D199UdYhTHuXiCDMfZP3QadLVq1cz3r3839f7OnTttc5yD9D+F79cBAAAoftTIAAAA2yLIAAAA2yLIAAAA2yLIAAAA2yLIAAAA2yLIAAAA2yLIAAAA2yLIAPCb4cOHy4ABA6xuBgAHYfdrAHkSFBSU6/OTJ082myYG2hqbS5culSuvvFJOnDhhNsMDULIQZADkyYEDBzy3//vf/8pjjz1mNo9zK1OmjLkAQHFiaAlAnugO5e5LTEyM6aHxfkxDTOahpW7dusk999wj48aNMzuQV6lSRd566y05c+aMjBgxQsqWLSsNGjSQr776yuezNm/eLH379jXvqV9z6623ytGjR3Ns2969e+W6664zn1G6dGlp1qyZzJ8/X/bs2WN6Y5Q+p23WNrp3q54yZYrZJTwqKkpatWoln3zyiU9Pjr5+3rx50rJlS4mMjJRLL73UtO1Cnwug+BBkABSp9957TypWrChr1641oebuu++WG2+8UTp37iw//vij9OrVywSVs2fPmtefPHlSrrrqKmnTpo2sX79eFixYIIcOHZKbbropx88YPXq0JCYmyvLly+Xnn3+WZ5991oSgWrVqyf/+9z/zGu090l4lHf5SGmJmzZolb7zxhmzZskX+/ve/y1/+8hdZtmyZz3tPmDBBXnjhBVm3bp1UqlTJBJfk5ORcPxdAMfLL1pMAHEV3rY2JicnyuO5m3r9/f5/dinU3creUlBRX6dKlXbfeeqvnMd1FV/8UrVq1ytx/6qmnXL169fJ53/3795vXZN4R3a1Fixauxx9/PNed10+cOOF5LCEhweziu3LlSp/Xjhw50uyw7v11H330kc8O7Lq773//+98Lfi6A4kGNDIAipcMybiEhIVKhQgVp0aKF5zEdOlKHDx821z/99JMsWbIk256NXbt2SaNGjbI8fu+995qenoULF0qPHj1k0KBBPp+b2c6dO00PUM+ePX0eT0pKMj1B3jp16uS5Xb58eWncuLFs27atQJ8LwP8YWgJQpMLCwnzua92J92Pu2VBas6Li4+PN8M3GjRt9Ljt27JCuXbtm+xl//etf5bfffjNDVDrE065dO5k2bVqObdLPUFr/4v0ZW7du9amTuZD8fi4A/yPIAAgol1xyialZqVu3rikE9r5oQW1OtB7mrrvukk8//VTGjx9viopVeHi4uU5NTfW8tmnTphIRESH79u3L8hn6Pt5Wr17tua1TuH/99Ve5+OKLL/i5AIoHQQZAQNEC2uPHj8uQIUNMga0OJ3399ddmlpN3GPGms6L0Nbt37zYFxDo05Q4bderUMb0+c+fOlSNHjpjeGJ0tdf/995sCXy1G1s/Qr9PeFL3v7cknn5TFixeb2Uo640kLl90zs3L7XADFgyADIKBUr15dVqxYYUKLzmjSehoNDLqYXXBw9n+y9LUagDRE9OnTx9TRvPbaa+a5GjVqyBNPPCEPPfSQqccZM2aMefypp56SSZMmmdlL7q/ToSadju1t6tSpMnbsWGnbtq0cPHhQvvzyS59enpw+F0DxCNKK32L6LACwDVYEBuyBHhkAAGBbBBkAAGBbDC0BAADbokcGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAADYFkEGAACIXf0/64lXeHDyZqEAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(1)\n",
    "thompson_sampling_solver = ThompsonSampling(bandit_10_arm)\n",
    "thompson_sampling_solver.run(5000)\n",
    "print(\"汤普森采样算法的累计懊悔为: \",thompson_sampling_solver.regret)\n",
    "plot_results([thompson_sampling_solver],[\"ThompsonSampling\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "90cf7ce8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python-learn",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
